import logging
import pytest,os,sys
# # 获取项目根目录（假设 test_role_search.py 在 case 目录，上两级是项目根）
# project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# sys.path.append(project_root)  # 把根目录加入模块搜索路径
from dotenv import load_dotenv
from config.config import EnvConfig
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

# 动态切换环境：终端执行命令pytest --env=dev（转开发环境）
def pytest_addoption(parser):
    parser.addoption(
        "--env",                  # 命令行参数名 (--env)
        action="store",          # 存储参数值
        default="test",          # 默认值（不指定时用测试环境）
        help="Environment to run tests against: dev, test, prod"  # 帮助说明
    )



# 在 pytest 的 fixture 中，autouse=True 表示该 fixture 会自动应用于所有测试用例，无需在测试函数中显式声明依赖。它会自动运行，无需通过参数传递
@pytest.fixture(scope="session", autouse=True)
def env_config(request):
    env_name = request.config.getoption("--env")  # 获取命令行参数值
    logging.info(f"\n========== 正在加载环境: {env_name} ==========")
    logging.info(f"命令行参数获取到的环境名: {env_name}")
    logging.info(f"尝试加载文件: .env.{env_name}")

    config = EnvConfig()
    config.load(env_name)  # 启动时加载配置

    logging.info("加载后的配置:")
    logging.info(f"API_BASE_URL: {config.API_BASE_URL}")
    logging.info(f"AUTH_TOKEN: {config.AUTH_TOKEN}")
    logging.info(f"COOKIE: {config.COOKIE}")

    yield   # 不需要返回config，因为它已经是全局单例

    # 清理操作（如果需要）
    # 注意：这里不会还原环境变量，因为它们是进程级的
    logging.info(f"\n测试完成，使用的环境: {env_name}")

